{#
 # ---------------------------------------------------------------------
 #
 # GLPI - Gestionnaire Libre de Parc Informatique
 #
 # http://glpi-project.org
 #
 # @copyright 2015-2024 Teclib' and contributors.
 # @copyright 2003-2014 by the INDEPNET Development Team.
 # @licence   https://www.gnu.org/licenses/gpl-3.0.html
 #
 # ---------------------------------------------------------------------
 #
 # LICENSE
 #
 # This file is part of GLPI.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 #
 # ---------------------------------------------------------------------
 #}

{% import 'components/form/fields_macros.html.twig' as fields %}
{% set field_options = {
   'full_width': true,
   'fields_template': itiltemplate,
   'disabled': (not canupdate),
   'add_field_class': (is_expanded ? 'col-sm-6' : ''),
   'rand': rand,
} %}

{% set itil_layout    = user_pref('itil_layout', true) %}
{% set headers_states = itil_layout['items'] %}

<div class="accordion open accordion-flush" id="itil-data">
   {% set main_show = headers_states['item-main'] is not defined or headers_states['item-main'] == "true" ? true : false %}
   <div class="accordion-item">
      <h2 class="accordion-header" id="heading-main-item">
         <button class="accordion-button {{ main_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#item-main" aria-expanded="true" aria-controls="ticket-main">
            <i class="ti ti-alert-circle me-1 item-icon"></i>
            <span class='status-recall'>
                {{ item.getStatusIcon(item.fields['status'])|raw }}
            </span>
            <span class="item-title">
                {{ item.getTypeName(1) }}
            </span>
         </button>
      </h2>
      <section id="item-main" class="accordion-collapse collapse {{ main_show ? "show" : "" }}" aria-labelledby="heading-main-item">
         <div class="accordion-body row m-0 mt-n2">

            {{ call_plugin_hook('pre_item_form', {"item": item, 'options': params}) }}

            {% if is_multi_entities_mode() %}
               {% if item.isNewItem() %}
                  {{ fields.dropdownField(
                     'Entity',
                     'entities_id',
                     item.fields['entities_id'],
                     _n('Entity', 'Entities', 1),
                     field_options|merge({
                        'entity': userentities,
                        'on_change': 'this.form.submit()',
                     })
                  ) }}
               {% else %}
                  {% set entity_html %}
                     {{ call('Entity::badgeCompletenameLinkById', [item.fields['entities_id']])|raw }}
                  {% endset %}

                  {{ fields.field(
                     '',
                     entity_html,
                     _n('Entity', 'Entities', 1),
                     field_options|merge({
                        'add_field_class': 'd-flex align-items-center',
                     })
                  ) }}
               {% endif %}

               {% if item.isField('is_recursive') %}
                  {{ fields.dropdownYesNo(
                     'is_recursive',
                     item.fields['is_recursive'],
                     __('Child entities'),
                     field_options
                  ) }}
               {% endif %}
            {% endif %}

            {{ fields.datetimeField(
               'date',
               item.fields['date'],
               __('Opening date'),
               field_options
            ) }}

            {% if item.getType() != 'Ticket' %}
               {{ fields.datetimeField(
                  'time_to_resolve',
                  item.fields['time_to_resolve'],
                  __('Time to resolve'),
                  field_options
               ) }}
            {% endif %}

            {% if item.isSolved(true) %}
               {{ fields.datetimeField(
               'solvedate',
               item.fields['solvedate'],
               __('Resolution date'),
               field_options
            ) }}
            {% endif %}

            {% if item.isClosed() %}
               {{ fields.datetimeField(
               'closedate',
               item.fields['closedate'],
               __('Close date'),
               field_options
            ) }}
            {% endif %}

            {% if item.getType() == 'Ticket' %}
               {% set type_params = {
                  'value': item.fields['type'],
                  'width': '100%',
                  'display': false,
                  'rand': rand,
               }|merge(field_options) %}
               {% if item.isNewItem() %}
                  {% set type_params = type_params|merge({'on_change': 'this.form.submit()',}) %}
               {% else %}
                  {% set type_params = type_params|merge({'on_change': 'reloadCategory()',}) %}
               {% endif %}
               {# Without passing a specific ID, the "dropdown" prefix is missing from the label's "for" property here (not sure why). TODO: investigate #}
               {{ fields.field(
                  'type',
                  item.dropdownType('type', type_params),
                  _n('Type', 'Types', 1),
                  field_options|merge({
                     id: 'dropdown_type' ~ rand,
                  })
               ) }}
            {% endif %}

            {% set cat_params = field_options|merge({
               'entity': item.fields['entities_id'],
               'disabled': (not (canupdate or can_requester)),
            }) %}
            {% if item.isNewItem() %}
               {% set cat_params = cat_params|merge({
                  'on_change': 'this.form.submit()',
               }) %}
            {% endif %}
            {% if not item.isNewItem() and itiltemplate.isMandatoryField('itilcategories_id') and item.fields['itilcategories_id'] > 0 %}
               {% set cat_params = cat_params|merge({
                  'display_emptychoice': false
               }) %}
            {% endif %}
            {% if item.getType() == 'Ticket' %}
               {% if item.fields['type'] == constant('Ticket::INCIDENT_TYPE') %}
                  {% set cat_params = cat_params|merge({'condition': {'is_incident': 1}}) %}
               {% elseif item.fields['type'] == constant('Ticket::DEMAND_TYPE') %}
                  {% set cat_params = cat_params|merge({'condition': {'is_request': 1}}) %}
               {% endif %}
            {% elseif item.getType() == 'Problem' %}
               {% set cat_params = cat_params|merge({'condition': {'is_problem': 1}}) %}
            {% elseif item.getType() == 'Change' %}
               {% set cat_params = cat_params|merge({'condition': {'is_change': 1}}) %}
            {% endif %}
            <span id="category_block_{{ rand }}">
            {{ fields.dropdownField(
               'ITILCategory',
               'itilcategories_id',
               item.fields['itilcategories_id'],
               _n('Category', 'Categories', 1),
               cat_params
            ) }}
            </span>

            {{ include('components/itilobject/fields/status.html.twig') }}

            {% if item.isField('requesttypes_id') %}
               {{ fields.dropdownField(
                  'RequestType',
                  'requesttypes_id',
                  item.fields['requesttypes_id'],
                  'RequestType'|itemtype_name,
                  field_options|merge({
                     'condition': {
                        'is_active': 1,
                        'is_ticketheader': 1
                     }
                  })
               ) }}
            {% endif %}

            {{ include('components/itilobject/fields/priority_matrix.html.twig') }}

            {% if item.isField('locations_id') %}
               {{ fields.dropdownField(
                  'Location',
                  'locations_id',
                  item.fields['locations_id'],
                  'Location'|itemtype_name,
                  field_options|merge({
                     'hide_if_no_elements': true,
                     'entity': item.fields['entities_id'],
                     'entity_sons': true
                  })
               ) }}
            {% endif %}

            {% if item.isNewItem() and item.getType() == 'Ticket' %}
               {{ fields.dropdownField(
                  'Contract',
                  '_contracts_id',
                  params['_contracts_id']|default(0),
                  'Contract'|itemtype_name,
                  field_options|merge({
                     'entity': item.fields['entities_id'],
                     'width': '100%',
                     'hide_if_no_elements': true,
                     'nochecklimit': true
                  })
               ) }}
            {% endif %}

            {% if item.getType() != 'Ticket' or item.isNewItem() %}
               {{ fields.dropdownTimestampField(
                  'actiontime',
                  item.fields['actiontime'],
                  __('Total duration'),
                  field_options
               ) }}
            {% endif %}

            {{ include('components/itilobject/fields/global_validation.html.twig') }}

            {% if item.isField('externalid') %}
               {{ fields.textField('externalid', item.fields['externalid'], __('External ID'), field_options) }}
            {% endif %}

            {{ call_plugin_hook('post_item_form', {"item": item, 'options': params}) }}
         </div>
      </section>
   </div>

   {% set actors_show = headers_states['actors'] is not defined or headers_states['actors'] == "true" ? true : false %}
   <div class="accordion-item">
      <h2 class="accordion-header" id="heading-actor" title="{{ __('Actors') }}" data-bs-toggle="tooltip">
         <button class="accordion-button {{ actors_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#actors" aria-expanded="true" aria-controls="actors">
            <i class="ti ti-users me-1"></i>
            <span class="item-title">
                {{ __('Actors') }}
            </span>
            <span class="badge bg-secondary text-secondary-fg ms-2">
               {{ item.countActors() }}
            </span>
            {% if not params['template_preview'] and cancreateuser and canupdate %}
               {{ include('components/user/create_user.html.twig') }}
            {% endif %}
         </button>
      </h2>
      <div id="actors" class="accordion-collapse collapse {{ actors_show ? "show" : "" }}" aria-labelledby="heading-actor">
         <div class="accordion-body accordion-actors row m-0 mt-n2">
            {{ include('components/itilobject/actors/main.html.twig') }}
         </div>
      </div>
   </div>

   {% if canreadnote %}
      {% set notes = call('Notepad::getAllForItem', [get_item('Entity', item.fields['entities_id']), 'Ticket']) %}
      {% set notes_show = headers_states['notes'] is not defined or headers_states['notes'] == "true" ? true : (notes|length > 0) %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="notes-heading" title="{{ __('Notes') }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ notes_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#notes" aria-expanded="true" aria-controls="notes">
               <i class="ti ti-notes me-1"></i>
               <span class="item-title">
                  {{ __('Entity notes') }}
               </span>
               <span class="badge bg-secondary text-secondary-fg ms-2">{{ notes|length }}</span>
            </button>
         </h2>
         <div id="notes" class="accordion-collapse collapse {{ notes_show ? "show" : "" }}" aria-labelledby="notes-heading">
            <div class="accordion-body row m-0 mt-n2">
               {% if notes|length == 0 %}
                  <div class="alert alert-info" role="alert">
                     {{ __('There is no notes on this entity') }}
                  </div>
               {% else %}
                  {% for note in notes %}
                     <div class="alert alert-info entitynote rich_text_container" role="alert">{{ note['content']|safe_html }}</div>
                  {% endfor %}
               {% endif %}
            </div>
         </div>
      </div>
   {% endif %}

   {% if item_commonitilobject is defined and item_commonitilobject is not null %}
      {% set items_show = headers_states['items'] is not defined or headers_states['items'] == "true" ? true : false %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="items-heading" title="{{ _n('Item', 'Items', get_plural_number()) }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ items_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#items" aria-expanded="true" aria-controls="items">
               <i class="ti ti-package me-1"></i>
               <span class="item-title">
                    {{ _n('Item', 'Items', get_plural_number()) }}
                </span>
               <span class="item-counter badge bg-secondary text-secondary-fg ms-2"></span>
               {% if itiltemplate.isMandatoryField('items_id') %}
                  <span class="required">*</span>
               {% endif %}
            </button>
         </h2>
         <div id="items" class="accordion-collapse collapse {{ items_show ? "show" : "" }}" aria-labelledby="items-heading">
            <div class="accordion-body accordion-items row m-0 mt-n2">
               {{ item_commonitilobject.itemAddForm(item, params|default({})|merge({entities_id: entities_id})) }}
            </div>
         </div>
      </div>
   {% endif %}

   {% if item.getType() == 'Ticket' %}
      {% set la_content %}
         {{ include('components/itilobject/service_levels.html.twig') }}
      {% endset %}

      {% if la_content|trim|length > 0 %}
         {% set nb_la = (item.fields['slas_id_tto'] > 0 ? 1 : 0) + (item.fields['slas_id_ttr'] > 0 ? 1 : 0) + (item.fields['olas_id_tto'] > 0 ? 1 : 0) + (item.fields['olas_id_ttr'] > 0 ? 1 : 0) %}
         {% set servicelevels_show = headers_states['service-levels'] is defined and headers_states['service-levels'] == "true" ? true : false %}
         <div class="accordion-item">
            <h2 class="accordion-header" id="service-levels-heading" title="{{ _n('Service level', 'Service levels', get_plural_number()) }}" data-bs-toggle="tooltip">
               <button class="accordion-button {{ servicelevels_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#service-levels" aria-expanded="true" aria-controls="service-levels">
                  <i class="ti ti-alarm me-1"></i>
                  <span class="item-title">
                     {{ _n('Service level', 'Service levels', get_plural_number()) }}
                  </span>
                  {% if nb_la > 0 %}
                     <span class="badge bg-secondary text-secondary-fg ms-2">{{ nb_la }}</span>
                  {% endif %}
               </button>
            </h2>
            <div id="service-levels" class="accordion-collapse collapse {{ servicelevels_show ? "show" : "" }}" aria-labelledby="service-levels-heading">
               <div class="accordion-body row m-0 mt-n2">
                  {{ la_content }}
               </div>
            </div>
         </div>
      {% endif %}
   {% endif %}

   {% if item.getType() in ['Problem', 'Change'] %}
      {% set analysis_fields = {
         'impactcontent': __('Impacts'),
         'causecontent': __('Causes'),
         'symptomcontent': __('Symptoms'),
         'controlistcontent': __('Control list'),
      } %}

      {% set nb_analysis = 0 %}
      {% for analysis_field, label in analysis_fields %}
         {% if item.isField(analysis_field) and item.fields[analysis_field]|trim|length > 0 %}
            {% set nb_analysis = nb_analysis + 1 %}
         {% endif %}
      {% endfor %}
      {% set analysis_show = headers_states['analysis'] is defined and headers_states['analysis'] == "true" ? true : false %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="analysis-heading" title="{{ __("Analysis") }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ analysis_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#analysis" aria-expanded="true" aria-controls="analysis">
               <i class="ti ti-eyeglass me-1"></i>
               <span class="item-title">
                    {{ __("Analysis") }}
               </span>
               {% if nb_analysis > 0 %}
                  <span class="badge bg-secondary text-secondary-fg ms-2">{{ nb_analysis }}</span>
               {% endif %}
            </button>
         </h2>
         <div id="analysis" class="accordion-collapse collapse {{ analysis_show ? "show" : "" }}" aria-labelledby="analysis-heading">
            <div class="accordion-body row m-0 mt-n2">
               {% for analysis_field, label in analysis_fields %}
                  {% if item.isField(analysis_field) %}
                     {{ fields.textareaField(
                        analysis_field,
                        item.fields[analysis_field],
                        label,
                        field_options|merge({
                           'enable_richtext': true,
                           'is_horizontal': false,
                        })
                     ) }}
                  {% endif %}
               {% endfor %}
            </div>
         </div>
      </div>
   {% endif %}

   {% if item.getType() == 'Change' %}
      {% set plans_fields = {
         'rolloutplancontent': __('Deployment plan'),
         'backoutplancontent': __('Backup plan'),
         'checklistcontent': __('Checklist'),
      } %}

      {% set nb_plans = 0 %}
      {% for plans_field, label in plans_fields %}
         {% if item.isField(plans_field) and item.fields[plans_field]|trim|length > 0 %}
            {% set nb_plans = nb_plans + 1 %}
         {% endif %}
      {% endfor %}

      {% set plans_show = headers_states['plans'] is defined and headers_states['plans'] == "true" ? true : false %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="plans-heading" title="{{ __("Plans") }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ plans_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#plans" aria-expanded="true" aria-controls="plans">
               <i class="ti ti-checkup-list me-1"></i>
               <span class="item-title">
                    {{ __("Plans") }}
               </span>
               {% if nb_plans > 0 %}
                  <span class="badge bg-secondary text-secondary-fg ms-2">{{ nb_plans }}</span>
               {% endif %}
            </button>
         </h2>
         <div id="plans" class="accordion-collapse collapse {{ plans_show ? "show" : "" }}" aria-labelledby="plans-heading">
            <div class="accordion-body row m-0 mt-n2">
               {% for plans_field, label in plans_fields %}
                  {% if item.isField(plans_field) %}
                     {{ fields.textareaField(
                        plans_field,
                        item.fields[plans_field],
                        label,
                        field_options|merge({
                           'enable_richtext': true,
                           'is_horizontal': false,
                        })
                     ) }}
                  {% endif %}
               {% endfor %}
            </div>
         </div>
      </div>
   {% endif %}

   {% set linked_itilobjects_show = headers_states['linked_itilobjects'] is defined and headers_states['linked_itilobjects'] == "true" ? true : false %}
   {% set nb_linked_itilobjects = item.isNewItem() ? 0 : call('CommonITILObject_CommonITILObject::countAllLinks', [item.getType(), item.getId()]) %}
   <div class="accordion-item">
      <h2 class="accordion-header" id="linked_itilobjects-heading" title="{{ 'CommonITILObject_CommonITILObject'|itemtype_name(nb_linked_itilobjects) }}" data-bs-toggle="tooltip">
         <button class="accordion-button {{ linked_itilobjects_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#linked_itilobjects" aria-expanded="true" aria-controls="linked_itilobjects">
            <i class="ti ti-link me-1"></i>
            {% if item.isNewItem() and params['_link']['items_id_2'] > 0 %}
               {% set nb_linked_itilobjects = 1 %}
            {% endif %}
            <span class="item-title">
                 {{ 'CommonITILObject_CommonITILObject'|itemtype_name(nb_linked_itilobjects) }}
            </span>
            {% if nb_linked_itilobjects > 0 %}
               <span class="badge bg-secondary text-secondary-fg ms-2">{{ nb_linked_itilobjects }}</span>
            {% endif %}
         </button>
      </h2>
      <div id="linked_itilobjects" class="accordion-collapse collapse {{ linked_itilobjects_show ? "show" : "" }}" aria-labelledby="linked_itilobjects-heading">
         <div class="accordion-body">
            {{ include('components/itilobject/linked_itilobjects.html.twig') }}
         </div>
      </div>
   </div>

    <span class="d-none d-md-block">
        <button type="button" class="switch-panel-width btn btn-icon btn-ghost-secondary position-absolute bottom-0 start-0 mb-2">
            <i class="fas fa-caret-left"></i>
        </button>
    </span>
</div>

<script type="text/javascript">
$(function() {
   if ($(window).width() < 768) { // medium breakpoint (Todo check if it's possible to get bootstrap breakpoints withint javascript)
      $('#itil-data .accordion-collapse').each(function() {
         $(this).removeClass('show');
      })
   }
});

$(function() {
    // Prevent display of accordion header tooltips when right panel is expanded
    $('#itil-data .accordion-header').on('show.bs.tooltip', function(e) {
        if (!$('#itil-object-container').hasClass('right-collapsed') && $(e.target).hasClass('accordion-header')) {
            e.preventDefault();
        }
    });
});

var reloadCategory = function() {
    var type = $('[name=type]').val();

    $('#category_block_{{ rand }} .field-container').load(
        '{{ path("ajax/dropdownTicketCategories.php") }}',
        {
            'type': type,
            'entity_restrict': {{ item.fields['entities_id'] }},
            'value': {{ item.fields['itilcategories_id'] }},
        }
    );
};
</script>
